#ifndef ROOM_HH
#define ROOM_HH

#include <string>
#include <vector>
#include "ICharacter.hh"
#include "Item.hh"

class Room {
private:
    std::string description;
    std::vector<Item*> items;
    std::vector<ICharacter*> enemies;
    Room* north;
    Room* south;
    Room* east;
    Room* west;

public:
    Room(const std::string& description);
    ~Room();
    Room(const Room& other); // Copy constructor
    Room& operator=(const Room& other); // Copy assignment operator

    void setDescription(const std::string& description);
    std::string getDescription() const;

    void addItem(Item* item);
    void removeItem(Item* item);
    Item* getItem(const std::string& name) const;
    std::vector<Item*> getItems() const;
    void addEnemy(ICharacter* enemy);
    void removeEnemy(ICharacter* enemy);
    ICharacter* getEnemy(const std::string& name) const;
    std::vector<ICharacter*> getEnemies() const;

    void setNorth(Room* room);
    void setSouth(Room* room);
    void setEast(Room* room);
    void setWest(Room* room);

    Room* getNorth() const;
    bool hasNorth() const;
    Room* getSouth() const;
    bool hasSouth() const;
    Room* getEast() const;
    bool hasEast() const;
    Room* getWest() const;
    bool hasWest() const;

    void generateRandomLoot() ;
    void display() const;
};

#endif // ROOM_HH